#ifndef _DATA_MANGER_H_
#define _DATA_MANGER_H_
#include <pthread.h>
#include "common.h"


typedef enum{
    LINE_WARNING = 0,       //巡线使能、关闭
    AROUND_SPEED = 1,       //自动巡检模式速度
    GYRO = 2,               //陀螺仪z轴
    RADAR = 3,              //超声波数据
    POWER_PER = 4,          //电量百分比
    POWER_VOL = 5,          //电池电压
    WORK_MODE  = 6,         //机器人模式: 1:正在巡检， 0:未工作
    MAXINDEX                //最大结构体数组长度

}DATAMANGER_INDEX;


typedef struct datam{               //管理全局变量，每个数据包含互斥量和数据两个部分
    pthread_mutex_t data_lock;
    int32_t data;

}DATAMANGER_STRUCT;

/******************WORK_MODE*********************/

/******************事件处理相关********************/
typedef enum{   //事件类型枚举
    EVENT_NULL,         //当前没有事件
    EVENT_GO_DISTANCE,  //前进固定距离
    EVENT_TURN_AROUND,  //原地转弯

}EVENT_INDEX;

typedef struct action_p{            //前进距离、转固定角度等的结构体
    EVENT_INDEX action;             //动作号
    int32_t  target_value;          //动作目标值
    int32_t  action_param;          //动作需要输入的参数
    int32_t  follow_action;         //接下来的动作
    pthread_mutex_t action_mutex;   //互斥锁
    pthread_cond_t  event_cond;     //条件变量
}ACTION_STRUCT;



int32_t robotinfo_read(DATAMANGER_INDEX index);
void robotinfo_write(DATAMANGER_INDEX index , int32_t temp);

void trigger_event(EVENT_INDEX index, int32_t target_val, int32_t param, int32_t follow_act);
EVENT_INDEX get_current_event(void);
int32_t get_event_targetval(void);
int32_t get_action_param(void);
int32_t get_event_followact(void);
void clear_event(void);
#endif // !_DATA_MANGER_H_